/**
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package pittypat;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(FIELD)
/**
 * 定义一个功能参数的相关元数据信息。
 */
public @interface ParameterAnnotation {
	/**
	 * 获取参数在参数列表中的位置，从 0 开始。
	 * 
	 * @return 参数在参数列表中的位置。
	 */
	public int position();

	/**
	 * 获取或者设置参数的方向，默认为 In。
	 * 
	 * @return 参数的方向。
	 */
	public ParameterDirection direction() default ParameterDirection.IN;

	/**
	 * 获取或者设置参数的作用。默认为 Normal。
	 * 
	 * @return 参数的作用。
	 */
	public ParameterRole role() default ParameterRole.NORMAL;

	/**
	 * 获取或者设置字符串或二进制流参数的最大长度，或者十进制数字的小数位数。默认为 0。
	 * 
	 * @return 字符串或二进制流参数的最大长度，或者十进制数字的小数位数。
	 */
	public int maxLength() default 0;

	/**
	 * 获取或者设置一个值，该值指示字符串或二进制流的长度是固定值。默认为 false。
	 * 
	 * @return 指示字符串或二进制流的长度是固定值。
	 */
	public boolean fixedLength() default false;

	/**
	 * 获取或者设置一个值，该值指示字符串是否仅仅包含 ASCII 字符。默认为 false。
	 * 
	 * @return 指示字符串是否仅仅包含 ASCII 字符。
	 */
	public boolean ascii() default false;
}
